﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// Загрузка переданных параметров.
	ПереданныйМассивФорматов = Новый Массив;
	ПараметрыНастройкиФормата = Параметры.НастройкиФормата;
	Если ПараметрыНастройкиФормата <> Неопределено Тогда
		ПереданныйМассивФорматов = ПараметрыНастройкиФормата.ФорматыСохранения;
		УпаковатьВАрхив = ПараметрыНастройкиФормата.УпаковатьВАрхив;
		ПереводитьИменаФайловВТранслит = ПараметрыНастройкиФормата.ПереводитьИменаФайловВТранслит;
		Элементы.Подписать.Видимость = ПараметрыНастройкиФормата.Подписать <> Неопределено;
		Подписать = ПараметрыНастройкиФормата.Подписать;
	КонецЕсли;
	
	МассивОграниченийФорматовСохранения = СтрРазделить(Параметры.ОграничениеФорматовСохранения, ",", Ложь);
	
	// заполнение списка форматов
	Для Каждого ФорматСохранения Из СтандартныеПодсистемыСервер.НастройкиФорматовСохраненияТабличногоДокумента() Цикл
		Пометка = Ложь;
		Если ПараметрыНастройкиФормата <> Неопределено Тогда 
			ПереданныйФормат = ПереданныйМассивФорматов.Найти(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента));
			Если ПереданныйФормат <> Неопределено Тогда
				Пометка = Истина;
			КонецЕсли;
		КонецЕсли;
		
		Если МассивОграниченийФорматовСохранения.Количество() = 0
			Или МассивОграниченийФорматовСохранения.Найти(ФорматСохранения.Расширение) <> Неопределено Тогда
				
			ВыбранныеФорматыСохранения.Добавить(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента), ФорматСохранения.Представление, Пометка, ФорматСохранения.Картинка);
		КонецЕсли;
	КонецЦикла;
	
	Если ВыбранныеФорматыСохранения.Количество() = 1 Тогда
		Элементы.ГруппаВыборФорматов.Видимость = Ложь;
		АвтоЗаголовок = Ложь;
		Заголовок = НСтр("ru = 'Выбор параметров вложений'");
		СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "БезВыбораФормата");
	ИначеЕсли ВыбранныеФорматыСохранения.Количество() > 1 Тогда
		СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "");
	КонецЕсли;
	
	Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
		ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Верх;
		Элементы.Подписать.Видимость = Ложь;
	КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки)
	Если Параметры.НастройкиФормата <> Неопределено Тогда
		Если Параметры.НастройкиФормата.ФорматыСохранения.Количество() > 0 Тогда
			Настройки.Удалить("ВыбранныеФорматыСохранения");
		КонецЕсли;
		Если Параметры.НастройкиФормата.Свойство("УпаковатьВАрхив") Тогда
			Настройки.Удалить("УпаковатьВАрхив");
		КонецЕсли;
		Если Параметры.НастройкиФормата.Свойство("ПереводитьИменаФайловВТранслит") Тогда
			Настройки.Удалить("ПереводитьИменаФайловВТранслит");
		КонецЕсли;
		Если Параметры.НастройкиФормата.Свойство("Подписать") Тогда
			Настройки.Удалить("Подписать");
		КонецЕсли;
		Возврат;
	КонецЕсли;
	
	Если ВыбранныеФорматыСохранения.Количество() <> 1 Тогда
		ФорматыСохраненияИзНастроек = Настройки["ВыбранныеФорматыСохранения"];
		Если ФорматыСохраненияИзНастроек <> Неопределено Тогда
			Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл 
				ФорматИзНастроек = ФорматыСохраненияИзНастроек.НайтиПоЗначению(ВыбранныйФормат.Значение);
				ВыбранныйФормат.Пометка = ФорматИзНастроек <> Неопределено И ФорматИзНастроек.Пометка;
			КонецЦикла;
			Настройки.Удалить("ВыбранныеФорматыСохранения");
		КонецЕсли;
	Иначе
		Настройки.Удалить("ВыбранныеФорматыСохранения");
	КонецЕсли;
	
	Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
		Настройки["Подписать"] = Ложь;
	КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
	Если ВыбранныеФорматыСохранения.Количество() = 1 Тогда
		Настройки.Удалить("ВыбранныеФорматыСохранения");
	КонецЕсли;
КонецПроцедуры


&НаКлиенте
Процедура ПриОткрытии(Отказ)
	УстановитьВыборФормата();
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Выбрать(Команда)
	РезультатВыбора = ВыбранныеНастройкиФормата();
	ОповеститьОВыборе(РезультатВыбора);
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УстановитьВыборФормата()
	
	ЕстьВыбранныйФормат = Ложь;
	Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл
		Если ВыбранныйФормат.Пометка Тогда
			ЕстьВыбранныйФормат = Истина;
		КонецЕсли;
	КонецЦикла;
	
	Если Не ЕстьВыбранныйФормат Тогда
		ВыбранныеФорматыСохранения[0].Пометка = Истина; // Выбор по умолчанию - первый в списке.
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Функция ВыбранныеНастройкиФормата()
	
	ФорматыСохранения = Новый Массив;
	
	Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл
		Если ВыбранныйФормат.Пометка Тогда
			ФорматыСохранения.Добавить(ВыбранныйФормат.Значение);
		КонецЕсли;
	КонецЦикла;	
	
	Результат = Новый Структура;
	Результат.Вставить("УпаковатьВАрхив", УпаковатьВАрхив);
	Результат.Вставить("ФорматыСохранения", ФорматыСохранения);
	Результат.Вставить("ПереводитьИменаФайловВТранслит", ПереводитьИменаФайловВТранслит);
	Результат.Вставить("Подписать", Подписать);
	
	Возврат Результат;
	
КонецФункции

#КонецОбласти
